package com.molichuxing.services.business.service;

import com.molichuxing.framework.dto.UploadFileRequestDto;
import com.molichuxing.framework.result.ResponseResult;
import com.molichuxing.framework.service.RootService;
import com.molichuxing.services.business.dto.request.create.*;
import com.molichuxing.services.business.dto.response.ContractPurchaseBizDto;

/**
 * <p>
 * 合同 服务类
 * </p>
 *
 * @author
 * @since 2019-10-09
 */
public interface ContractBizService extends RootService {

    /**
     * 添加专属合同
     *
     * @param dto
     * @return
     * @throws Exception
     */
    public Boolean createExclusivelContract(ContractExclusivelBizCreateDto dto) throws Exception;

    /**
     * 创建订阅合同
     *
     * @param dto
     * @return
     * @throws Exception
     */
    public Boolean createSubscribeContract(ContractSubscribeBizCreateDto dto) throws Exception;

    /**
     * 生成通用条款和保证合同
     *
     * @param dto
     * @return
     */
    public ResponseResult<String> createGeneralAndGuarantee(ContractGeneralBizCreateDto dto, UploadFileRequestDto uploadFileRequestDto);

    /**
     * 生成专用条款和补充协议
     *
     * @param dto
     * @return
     */
    public ResponseResult<Boolean> createSpecialAndSupplement(ContractSupplementBizCreateDto dto, UploadFileRequestDto uploadFileRequestDto);

    /**
     * 交车单
     *
     * @param dto
     * @return
     */
    public ResponseResult<Boolean> createDelivery(ContractDeliveryBizCreateDto dto, UploadFileRequestDto uploadFileRequestDto);


    /**
     * 生成里程包合同
     *
     * @param dto
     * @return
     */
    public ResponseResult<String> createMileageBag(ContractMileageBagBizCreateDto dto, UploadFileRequestDto uploadFileRequestDto);

    /**
     * 加购里程 和 续单里程  合同
     *
     * @param dto
     * @return
     */
    public ResponseResult<String> createPurchased(ContractMileagePurchasedBizCreateDto dto, UploadFileRequestDto uploadFileRequestDto);

    /**
     * 添加采购合同
     *
     * @param dto
     * @return
     * @throws Exception
     */
    public Boolean createPurchaseContract(ContractPurchaseBizCreateDto dto) throws Exception;


    /**
     * 获取合同
     *
     * @param orderCode
     * @return
     */
    public ContractPurchaseBizDto getPurchaseContract(Long orderCode);

    /**
     * 创建订悦提车单
     *
     * @return
     */
    public Boolean createBookingCarContract(ContractBookingCarBizCreateDto dto) throws Exception;

    /**
     * 退租创建解除协议
     *
     * @param createDto
     * @param uploadFileRequestDto
     * @return
     */
    public Boolean createRenege(ContractRenegeBizCreateDto createDto, UploadFileRequestDto uploadFileRequestDto);

}
